package com.labofjet.util;

import java.text.ParseException;
import java.util.Calendar;
import java.util.Date;

import org.apache.commons.lang3.time.DateUtils;

/**
 * 常用的日期方法
 * 
 * @author jyzjyz12@163.com
 * 
 */
public class DateHelper {
	private DateHelper() {

	}

	/**
	 * 返回本年输入月份的第一天,第一秒
	 * 
	 * @return
	 */
	public static Date firstDayOfMonth(int month) {
		return DateUtils.truncate(DateUtils.setDays(DateUtils.setMonths(new Date(), month), 1), Calendar.DATE);
	}

	/**
	 * 本月第一天,第一秒
	 * 
	 * @return
	 */
	public static Date firstDayOfThisMonth() {
		return DateUtils.truncate(DateUtils.setDays(new Date(), 1), Calendar.DATE);
	}

	/**
	 * 本月最后一天,最后一秒
	 * 
	 * @return
	 */
	public static Date lastDayOfThisMonth() {
		return DateUtils.addSeconds(DateUtils.ceiling(new Date(), Calendar.MONTH), -1);
	}

	/**
	 * 返回本年输入月份最后一天,最后一秒
	 * 
	 * @return
	 */
	public static Date lastDayOfMonth(int month) {
		return DateUtils.addSeconds(DateUtils.ceiling(DateUtils.setMonths(new Date(), month), Calendar.MONTH), -1);
	}

	/**
	 * 本年第一天,第一秒
	 * 
	 * @return
	 */
	public static Date firstDayOfThisYear() {
		return DateUtils.truncate(new Date(), Calendar.YEAR);
	}

	/**
	 * 本年最后一天最后一秒
	 * 
	 * @return
	 */
	public static Date lastDayOfThisYear() {
		return DateUtils.addMinutes(DateUtils.ceiling(new Date(), Calendar.YEAR), -1);
	}

	/**
	 * 设置时分秒为0,0,0,一般用于日期起
	 * 
	 * @return
	 */
	public static Date q(Date d) {
		return DateUtils.truncate(d, Calendar.DATE);
	}

	/**
	 * 设置时分秒为23,59,59,一般用于日期止
	 * 
	 * @return
	 */
	public static Date z(Date d) {
		return DateUtils.addSeconds(DateUtils.ceiling(d, Calendar.DATE), -1);
	}

	/**
	 * 解析日期,使用IllegalArgumentException代替parseException
	 * 
	 * @param str
	 * @param parsePatterns
	 * @return
	 */
	public static Date parseDate(String str, String... parsePatterns) {
		try {
			return DateUtils.parseDate(str, parsePatterns);
		} catch (ParseException e) {
			throw new IllegalArgumentException("解析日期字符串错误");
		}
	}
}
